import sys
import os
import hashlib

# 添加项目根目录到系统路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from database import Database
from iteration5_user_management.query_user import UserQuery

class UserUpdater:
    def __init__(self):
        self.db = Database()
        self.query = UserQuery()
    
    def update_user_info(self, user_id, name=None, contact=None, status=None):
        """
        更新用户基本信息
        
        参数:
            user_id (int): 用户ID
            name (str): 新姓名
            contact (str): 新联系方式
            status (str): 新状态
        
        返回:
            bool: 更新成功返回True，否则返回False
        """
        try:
            # 检查用户是否存在
            user = self.query.query_user_by_id(user_id)
            if not user:
                print(f"错误：ID为 {user_id} 的用户不存在")
                return False
            
            # 验证状态是否有效
            if status and status not in ['active', 'inactive']:
                print("错误：状态必须是 'active' 或 'inactive'")
                return False
            
            # 构建更新语句
            update_fields = []
            params = []
            
            if name is not None:
                update_fields.append("name = ?")
                params.append(name)
            
            if contact is not None:
                update_fields.append("contact = ?")
                params.append(contact)
            
            if status is not None:
                update_fields.append("status = ?")
                params.append(status)
            
            if not update_fields:
                print("没有提供任何更新信息")
                return False
            
            # 连接数据库并执行更新
            self.db.connect()
            
            query = f"UPDATE user SET {', '.join(update_fields)} WHERE id = ?"
            params.append(user_id)
            
            self.db.cursor.execute(query, params)
            self.db.conn.commit()
            
            if self.db.cursor.rowcount > 0:
                print(f"成功：用户 {user[1]} 的信息已更新")
                return True
            else:
                print("警告：没有记录被更新")
                return False
        except Exception as e:
            print(f"错误：更新用户信息时发生错误 - {str(e)}")
            return False
        finally:
            self.db.close()
    
    def update_user_password(self, user_id, new_password):
        """
        更新用户密码
        
        参数:
            user_id (int): 用户ID
            new_password (str): 新密码
        
        返回:
            bool: 更新成功返回True，否则返回False
        """
        try:
            # 检查用户是否存在
            user = self.query.query_user_by_id(user_id)
            if not user:
                print(f"错误：ID为 {user_id} 的用户不存在")
                return False
            
            if not new_password:
                print("错误：密码不能为空")
                return False
            
            # 对密码进行哈希处理
            hashed_password = hashlib.sha256(new_password.encode()).hexdigest()
            
            # 连接数据库并执行更新
            self.db.connect()
            
            self.db.cursor.execute(
                "UPDATE user SET password = ? WHERE id = ?",
                (hashed_password, user_id)
            )
            self.db.conn.commit()
            
            if self.db.cursor.rowcount > 0:
                print(f"成功：用户 {user[1]} 的密码已更新")
                return True
            else:
                print("警告：没有记录被更新")
                return False
        except Exception as e:
            print(f"错误：更新用户密码时发生错误 - {str(e)}")
            return False
        finally:
            self.db.close()
    
    def update_user_role(self, user_id, new_role):
        """
        更新用户角色
        
        参数:
            user_id (int): 用户ID
            new_role (str): 新角色
        
        返回:
            bool: 更新成功返回True，否则返回False
        """
        try:
            # 检查用户是否存在
            user = self.query.query_user_by_id(user_id)
            if not user:
                print(f"错误：ID为 {user_id} 的用户不存在")
                return False
            
            # 验证角色是否有效
            valid_roles = ['admin', 'manager', 'staff']
            if new_role not in valid_roles:
                print(f"错误：角色必须是 {', '.join(valid_roles)} 之一")
                return False
            
            # 连接数据库并执行更新
            self.db.connect()
            
            self.db.cursor.execute(
                "UPDATE user SET role = ? WHERE id = ?",
                (new_role, user_id)
            )
            self.db.conn.commit()
            
            if self.db.cursor.rowcount > 0:
                print(f"成功：用户 {user[1]} 的角色已更新为 {new_role}")
                return True
            else:
                print("警告：没有记录被更新")
                return False
        except Exception as e:
            print(f"错误：更新用户角色时发生错误 - {str(e)}")
            return False
        finally:
            self.db.close()

# 如果直接运行此文件，提供命令行界面
if __name__ == "__main__":
    updater = UserUpdater()
    query = UserQuery()
    
    print("===== 用户信息更新 =====")
    print("1. 更新用户基本信息")
    print("2. 更新用户密码")
    print("3. 更新用户角色")
    
    choice = input("请选择操作 (1-3): ")
    
    # 先查询所有用户
    users = query.query_all_users()
    if not users:
        print("没有找到任何用户信息")
        sys.exit(0)
    
    print("\n当前用户列表:")
    print("ID\t用户名\t角色\t姓名\t联系方式\t状态")
    for user in users:
        print(f"{user[0]}\t{user[1]}\t{user[2]}\t{user[3] or '-'}\t{user[4] or '-'}\t{user[5]}")
    
    try:
        user_id = int(input("\n请输入要更新的用户ID: "))
        
        if choice == '1':
            print("\n请输入新的用户信息（不更新的项目请留空）:")
            name = input("新姓名: ")
            contact = input("新联系方式: ")
            
            print("\n状态选项:")
            print("1. active - 活跃")
            print("2. inactive - 禁用")
            status_choice = input("新状态 (1-2): ")
            
            status = None
            if status_choice == '1':
                status = 'active'
            elif status_choice == '2':
                status = 'inactive'
            elif status_choice:
                print("错误：无效的状态选择")
                sys.exit(1)
            
            updater.update_user_info(
                user_id, 
                name or None, 
                contact or None, 
                status
            )
        
        elif choice == '2':
            new_password = input("请输入新密码: ")
            confirm_password = input("请确认新密码: ")
            
            if new_password != confirm_password:
                print("错误：两次输入的密码不一致")
                sys.exit(1)
            
            updater.update_user_password(user_id, new_password)
        
        elif choice == '3':
            print("\n角色选项:")
            print("1. admin - 管理员")
            print("2. manager - 经理")
            print("3. staff - 普通员工")
            role_choice = input("请选择新角色 (1-3): ")
            
            role = None
            if role_choice == '1':
                role = 'admin'
            elif role_choice == '2':
                role = 'manager'
            elif role_choice == '3':
                role = 'staff'
            else:
                print("错误：无效的角色选择")
                sys.exit(1)
            
            updater.update_user_role(user_id, role)
        
        else:
            print("无效的选择")
    
    except ValueError:
        print("错误：用户ID必须是数字")